const promise_state = {
    pending: 0
    , fulfilled: 1
    , rejected: 2
}
class newPromise {
    #result
    // 创建一个变量来记录Promise的状态,以防止被再次输入变量...导致改变
    #state = promise_state.pending // pending 0 fulfilled 1 rejected 2
    // 创建一个callback来存储回调函数
    #callback
    // executor 形参
    constructor(executor) {
        // 通过this来进行引用方法
        executor(this.#resolve, this.#reject)//调用回调函数
    }
    #resolve = (value) => {
        // 禁止值被修改,如果state不等于0说明已经被修改了,让函数直接返回
        if (this.#state !== promise_state.pending) return
        this.#result = value
        this.#state = promise_state.fulfilled //表示数据填充成功了
        // 判断callback拥有值的同时调用回调函数.
        this.#callback && this.#callback(this.#result)
    }
    // reason 原因.
    #reject(reason) { }
    // 添加then方法,用来读取数据
    then(onFulfilled, onRejected) {
        // 因为只判断的时候不是异步的,是同步的,判断完发现没有就没有了,要解决这个问题,可以在数据一定被输出的时候来调用回调函数
        // 利用外部变量存储回调函数,使其回调函数能在其他地方使用,解决异步导致的数据没进来,无法读取数据的问题
        if (this.#state === promise_state.pending) {
            this.#callback = onFulfilled
        }
        else if (this.#state === promise_state.fulfilled) {
            /* 
                目前来讲,then只能读取已经存储进Promise的数据
                    而不能读取异步存储的数据  
            */
            onFulfilled(this.#result)
        }
    }

}
const mp = new newPromise((resolve, reject) => {
    setTimeout(() => {
        resolve("GG")
    }, 1000)
})
console.log(mp);
mp.then((result) => {
    console.log("读取数据", result);
})